package main

import (
	"demo/es"
	"fmt"
	"math/rand"
	"strconv"
	"strings"
)

func main() {
	//es.StatAggs("age-stat")
	//es.TermsAggs("age-term")
	//es.RangeAggs("birthday-aggs")

	//IndexCity()
	//IndexCityBatch()
	//SearchCity()
	SearchCity2()
}

func Insert() {
	names := `林芳伊 伊伊 范帅  嘉赐 嘉容 嘉勋 宾鸿 宾实 彬彬 彬炳 彬郁 斌斌 斌蔚 滨海 波光 波鸿 波峻 博瀚 博超 博达 博厚 博简 博明 博容 博赡 博涉 博实 博涛 博学 博雅 博延 博艺 博易 博裕 博远 才良 成双 承基 承载 才艺 成天 承教 承泽 才英 才哲 才俊 成和 成弘 成化 成济 成礼 成龙 成文 成业 成益 成荫 成周 承安 承弼 承德 承恩 承平 承嗣 承天 承望 承宣 承颜 承业 承悦 承允 承志 德海 德厚 德华 德辉 德惠 德容 德润 德寿 德水 德馨 德曜 德义 德庸 德佑 德宇 德元 德运 德泽 德明 飞白 飞飙 飞掣 飞尘 飞沉 飞驰 飞光 飞翰 飞航 飞翮 飞鸿 飞捷 飞龙 飞鸾 飞鸣 飞鹏 飞扬 飞文 飞翔 飞星 飞翼 飞英 飞羽 飞雨 飞语 飞跃 飞章 飞舟 风华 丰茂 丰羽 刚洁 高峯 高旻 高原 光启 晗日 涵映 翰藻 昊英 浩慨 浩言 和惬 和玉 弘光 弘文 宏博 宏朗 宏逸 鸿德 鸿轩 鸿卓 华美 刚捷 高峰 高明 高远 光熙 涵畅 涵育 瀚海 浩波 浩旷 皓轩 和顺 和裕 弘和 弘新 宏才 宏茂 宏毅 鸿飞 鸿煊 华奥 华清 刚毅 高歌 高爽 高韵 光耀 涵涤 翰采 瀚漠 浩博 浩阔 和蔼 和硕 和豫 弘厚 弘雅 宏畅 宏邈 宏远 鸿风 鸿煊 华采 华荣 高昂 高格 高兴 高卓 光誉 涵亮 翰池 昊苍 浩初 浩漫 和安 和颂 和悦 弘化 弘扬 宏达 宏儒 宏壮 鸿福 鸿雪 华彩 华容 高岑 高寒 高轩 光赫 光远 涵忍 翰飞 昊昊 浩大 浩淼 和璧 和泰 和韵 弘济 弘业 宏大 宏深 鸿宝 鸿光 鸿羽 华灿 高畅 高翰 高雅 光华 国安 涵容 翰海 昊空 浩宕 浩渺 和昶 和悌 和泽 弘阔 弘义 宏放 宏胜 鸿波 鸿晖 鸿远 华藏 高超 高杰 高扬 光辉 国兴 涵润 翰翮 昊乾 浩荡 浩邈 和畅 和通 和正 弘亮 弘益 宏富 宏盛 鸿博 鸿朗 鸿云 华池 高驰 高洁 高阳 光济 国源 涵涵 翰林 昊穹 浩歌 浩气 和风 和同 和志 弘量 弘毅 宏峻 宏爽 鸿才 鸿文 鸿运 华翰 高达 高峻 高义 光霁 冠宇 涵煦 翰墨 昊然 浩广 浩然 和歌 和煦 鹤轩 弘深 弘懿 宏浚 宏硕 鸿彩 鸿熙 鸿哲 华皓 高澹 高朗 高谊 光亮 冠玉 涵蓄 翰学 昊然 浩涆 浩穰 和光 和雅 弘博 弘盛 弘致 宏恺 宏伟 鸿畅 鸿羲 鸿祯 华晖 高飞 高丽 高逸 光临 涵衍 翰音 昊天 浩瀚 浩壤 和平 和宜 弘大 弘图 弘壮 宏旷 宏扬 鸿畴 鸿禧 鸿振 华辉 嘉德 嘉福 嘉良 嘉茂 嘉木 嘉慕 嘉纳 嘉年 嘉平 嘉庆 嘉荣 嘉瑞 嘉胜 嘉石 嘉实 嘉树 嘉澍 嘉熙 嘉禧 嘉祥 嘉歆 嘉许 嘉言 嘉谊 嘉懿 嘉颖 嘉佑 嘉玉 嘉誉 嘉悦 嘉运 嘉泽 嘉珍 嘉祯 建弼 建章 经纬 景山 俊才 俊郎 俊爽 俊誉 K 开畅 凯捷 康复 L 乐安 乐水 乐悦 力言 良畴 M 茂才 敏学 明轩 P 朋兴 鹏飞 濮存 Q 奇略 奇志 R 荣轩 锐泽 睿广 S 绍辉 斯年 T 泰初 天干 天逸 同济 W 巍昂 嘉志 建德 建中 经武 景胜 俊材 俊力 俊悟 俊远 嘉致 建华 健柏 经业 景铄 俊驰 俊良 俊晤 俊哲 坚白 建明 金鑫 经义 景天 俊楚 俊迈 俊侠 俊喆 坚壁 建茗 锦程 经艺 景同 俊达 俊茂 俊贤 俊智 坚秉 建木 瑾瑜 景澄 景曜 俊德 俊美 俊雄 峻熙 坚成 建树 晋鹏 景福 靖琪 俊发 俊民 俊雅 季萌 坚诚 建同 经赋 景焕 君昊 俊风 俊名 俊彦 季同 建安 建修 经亘 景辉 君浩 俊豪 俊明 俊逸 建白 建业 经国 景辉 俊艾 俊健 俊楠 俊英 建柏 建义 经略 景龙 俊拔 俊杰 俊能 俊友 建本 建元 经纶 景明 俊弼 俊捷 俊人 俊语 开诚 开宇 开济 开霁 开朗 凯安 凯唱 凯定 凯风 凯复 凯歌 凯凯 凯康 凯乐 凯旋 凯泽 恺歌 恺乐 康安 康伯 康成 康德 康健 康乐 康宁 康平 康胜 康盛 康时 康适 康顺 康泰 康裕 乐邦 乐天 乐湛 立诚 良工 乐成 乐童 乐章 立果 良翰 乐池 乐贤 乐正 立人 良吉 乐和 乐心 乐志 立辉 良骥 乐家 乐欣 黎昕 立轩 良俊 乐康 乐逸 黎明 立群 良骏 乐人 乐意 力夫 良奥 良朋 乐容 乐音 力强 良弼 良平 乐山 乐咏 力勤 良才 良哲 乐生 乐游 力行 良材 理群 乐圣 乐语 力学 良策 理全 茂材 茂德 茂典 茂实 茂学 茂勋 茂彦 敏博 敏才 敏达 敏睿 敏智 明诚 明达 明德 明辉 明杰 明俊 明朗 明亮 明旭 明煦 明远 明哲 明喆 明知 明志 明智 明珠 朋义 彭勃 彭薄 彭湃 彭彭 彭魄 彭越 彭泽 彭祖 鹏程 鹏池 鹏赋 鹏海 鹏鲸 鹏举 鹏鹍 鹏鲲 鹏涛 鹏天 鹏翼`

	nameArr := strings.Split(names, " ")

	for i, name := range nameArr {
		age := rand.Intn(100)

		year := 2000 + rand.Intn(20)
		month := 1 + rand.Intn(11)
		day := 1 + rand.Intn(27)
		birth := fmt.Sprintf("%d-%02d-%02d", year, month, day)
		sex := ""
		if age%2 == 0 {
			sex = es.MALE
		} else {
			sex = es.FEMALE
		}
		u := es.User{
			ID:       i,
			Name:     name,
			Age:      age,
			Birthday: birth,
			Sex:      sex,
			Profile:  name + "的直播间",
		}

		es.Index(&u)
	}
}

func Update() {
	es.Update(&es.User{ID: 1, Name: "我叫林芳伊"})
}

func Delete() {
	es.Delete("4")
}

func BulkIndex() {
	var users []*es.User
	for i := 10; i < 20; i++ {
		u := es.Get(strconv.Itoa(i))
		fmt.Println(u)

		u.Profile = u.Profile + " 副本1"
		users = append(users, u)
	}

	es.BulkIndex(users)
}

func BulkDelete() {
	ids := []string{}
	for i := 10; i < 20; i++ {
		u := es.Get(strconv.Itoa(i))
		fmt.Println(u)

		ids = append(ids, strconv.Itoa(i))
	}

	es.BulkDelete(ids)
}

func MultiGet() {
	for i := 10; i < 20; i++ {
		u := es.Get(strconv.Itoa(i))
		fmt.Println(u)
	}
}

func MultiGet2() {
	var ids []string
	for i := 10; i < 20; i++ {
		ids = append(ids, strconv.Itoa(i))
	}

	users := es.MultiGet(ids)
	fmt.Println(users)
}

func Query3() {
	var userQuery es.UserQuery
	userQuery.BirthBegin = "2019-01-01"
	userQuery.BirthEnd = "2020-01-01"
	QueryWithSort(&userQuery)
}

func Query2() {
	var userQuery es.UserQuery
	userQuery.MinAge = 10
	userQuery.MaxAge = 20
	Query(&userQuery)
}

func Query1() {
	var userQuery es.UserQuery
	userQuery.Q = "林芳伊"
	Query(&userQuery)
}
func Query(userQuery *es.UserQuery) {
	result := es.Query(userQuery, 1, 10)
	fmt.Printf("%#v\n", result)
	users := result.Users

	if len(users) > 0 {
		for _, u := range users {
			fmt.Println(*u)
		}
	}
}

func QueryWithSort(userQuery *es.UserQuery) {
	result := es.QueryWithSort(userQuery, 1, 10, []string{"age", "birthday"})
	fmt.Printf("%#v\n", result)
	users := result.Users

	if len(users) > 0 {
		for _, u := range users {
			fmt.Println(*u)
		}
	}
}

func FunctionScoreQuery() {
	var userQuery es.UserQuery
	userQuery.MinAge = 10
	userQuery.MaxAge = 20
	result := es.FunctionScoreQuery2(&userQuery, 1, 20)
	fmt.Printf("%#v\n", result)
	users := result.Users

	if len(users) > 0 {
		for _, u := range users {
			fmt.Println(*u)
		}
	}
}
